package com.atguigu.daijia.coupon.mapper;

import com.atguigu.daijia.model.entity.coupon.CouponInfo;
import com.atguigu.daijia.model.vo.coupon.NoReceiveCouponVo;
import com.atguigu.daijia.model.vo.coupon.NoUseCouponVo;
import com.atguigu.daijia.model.vo.coupon.UsedCouponVo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface CouponInfoMapper extends BaseMapper<CouponInfo> {

    /**
     * 查询未领取优惠券分页列表
     *
     * @param pageParam  分页参数
     * @param customerId 顾客ID
     */
    IPage<NoReceiveCouponVo> findNoReceivePage(@Param("pageParam") Page<CouponInfo> pageParam,
                                               @Param("customerId") Long customerId);

    /**
     * 查询未使用优惠券分页列表
     *
     * @param pageParam  分页参数
     * @param customerId 顾客Id
     */
    IPage<NoUseCouponVo> findNoUsePage(@Param("pageParam") Page<CouponInfo> pageParam,
                                       @Param("customerId") Long customerId);

    /**
     * 查询已使用优惠券分页列表
     *
     * @param pageParam  分页参数
     * @param customerId 顾客Id
     */
    IPage<UsedCouponVo> findUsedPage(@Param("pageParam") Page<CouponInfo> pageParam,
                                     @Param("customerId") Long customerId);

    /**
     * 更新优惠券领取数量
     *
     * @param couponId 优惠券Id
     */
    int updateReceiveCount(@Param("couponId") Long couponId);

    /**
     * 更新优惠券领取数量 - 乐观锁
     *
     * @param couponId 优惠券Id
     */
    int updateReceiveCountByLimit(@Param("id") Long couponId);

    /**
     * 获取未使用的优惠券列表
     *
     * @param customerId 顾客Id
     */
    List<NoUseCouponVo> findNoUseList(@Param("customerId") Long customerId);

    /**
     * 使用优惠券
     *
     * @param id 优惠券Id
     */
    int updateUseCount(@Param("id") Long id);
}
